package clases;
import java.lang.*;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;



public class Seccion {
	
	// BufferedReader lee por teclado
	//new Vector<Estudiante> crea un vector vacio
	protected int num_Seccion;
	protected Vector<Estudiante> inscritos = new Vector<Estudiante>();	
	protected Profesor prof_Asig;
	protected boolean evaluacion;
	
	public Seccion(){
		super();
		prof_Asig=null;
		num_Seccion =-1;
		evaluacion=false;
	}
	
	public Seccion(int num_Seccion, Vector<Estudiante> inscritos, Profesor prof_Asig) {
		super();
		this.num_Seccion = num_Seccion;
		this.inscritos = inscritos;
		this.prof_Asig = prof_Asig;
	}
	
	

	public boolean isEvaluacion() {
		return evaluacion;
	}

	public void setEvaluacion(boolean evaluacion) {
		this.evaluacion = evaluacion;
	}

	public int getNum_Seccion() {
		return num_Seccion;
	}

	public void setNum_Seccion(int num_Seccion) {
		this.num_Seccion = num_Seccion;
	}

	public Vector<Estudiante> getInscritos() {
		return inscritos;
	}

	public void setInscritos(Vector<Estudiante> var) {
		this.inscritos = var;
	}

	public Profesor getProf_Asig() {
		return prof_Asig;
	}

	public void setProf_Asig(Profesor prof_Asig) {
		this.prof_Asig = prof_Asig;
	}
	
	public void prof_Asig(int cedProf,String nomProf,String apeProf,String titu){
	
			setProf_Asig(new Profesor(cedProf, nomProf, apeProf, titu));
	
		
	}

	
	public void inscribir_Est(int ced,String nom,String ape){
				inscritos.addElement(new Estudiante(ced,nom,ape));
 
	}
	
	public int buscar_Est(int ced){
		int pos = -1;
		//boolean exist = false
		System.out.println(inscritos.size());
		for (int i=0; i < inscritos.size() ; i++){
			if (inscritos.get(i).getCedula()== ced){
			pos = i;
			}
		}	
		return pos;
	}

		
	public Estudiante mostrar_Est_Ced (int ced ){
	
			int i = this.buscar_Est(ced);
			if (i != -1)
				return inscritos.elementAt(i);
			else
				return null;
	
	}
	
	public int eliminarEstudiante (int ced){

			int i = this.buscar_Est(ced);
			if (i != -1)
				inscritos.remove(i);
			return i;
			
	
		}
	public void aplicar_Evaluaciones(){
		evaluacion=true;
		//este modulo hace q todos los estudiantes inscritos presenten y despues q el profesor los evalue
//Iterator iterator nos permite recorrer un arreglo de forma mas sencilla
		for (Iterator iterator = inscritos.iterator(); iterator.hasNext();) {
			Estudiante type = (Estudiante) iterator.next();
			System.out.println(type.presentarEvaluacion());
			prof_Asig.evaluar_Estudiante(type);
		}
		System.out.println("El profesor evaluo a los estudiantes exitosamente");
	}

	public Vector<Estudiante> listar_Ced(){
		for (int i = 0; i < inscritos.size() - 1; ++i)
 	       for (int j = i + 1; j < inscritos.size(); ++j)
 	        	if(inscritos.elementAt(i).getCedula()>inscritos.elementAt(j).getCedula())
 	        		Collections.swap(inscritos,i,j);
		
		Archivo escribir = new Archivo();
		escribir.crearsalida("listar_ced.txt");
		escribir.escribirMensaje("Listado de Estudiantes Ordenados por Cedula");
		System.out.println();
		for (int i = 0; i < inscritos.size() ; i++){
			escribir.escribirMensaje(inscritos.elementAt(i).getCedula()+" "+inscritos.elementAt(i).getNombre()+" "+inscritos.elementAt(i).getApellido());
		}
		escribir.cerrarsalida();
		return inscritos;
	}
	
	public Vector<Estudiante> listar_Notas(){
		//ordeanmiento por burbuja
		for (int i = 0; i < inscritos.size() - 1; ++i)
 	       for (int j = i + 1; j < inscritos.size(); ++j)
 	        	if(inscritos.elementAt(i).getNota_Final()<inscritos.elementAt(j).getNota_Final())
 	        		//Collections.swap intercambia los posiciones i j del vector
 	        		Collections.swap(inscritos,i,j);
		
		Archivo escribir = new Archivo();
		escribir.crearsalida("listar_nota.txt");
		escribir.escribirMensaje("Listado de Estudiantes Ordenados por Nota Final");
		System.out.println();
		for (int i = 0; i < inscritos.size(); i++){
			escribir.escribirMensaje(inscritos.elementAt(i).getCedula()+" "+inscritos.elementAt(i).getNombre()+" "+inscritos.elementAt(i).getApellido()+" Nota Final: "+inscritos.elementAt(i).getNota_Final());
		}
		escribir.cerrarsalida();
		return inscritos;
	}
	
	public Vector<Estudiante> listar_Alum_Aprob(){
		// sw verifica q si no hay estudiantes aprobalos esbribe un mensaje informando ese hecho
		Vector<Estudiante> aux = new Vector<Estudiante>();
		boolean sw = false;
		Archivo escribir = new Archivo();
		escribir.crearsalida("listar_aprob.txt");
		escribir.escribirMensaje("Listado de Estudiantes Aprobados");
		System.out.println();
		for (int i = 0; i < inscritos.size(); i++){
			if(inscritos.elementAt(i).getEstatus()=='A'){
				aux.add(inscritos.elementAt(i));
				escribir.escribirMensaje(inscritos.elementAt(i).getCedula()+" "+inscritos.elementAt(i).getNombre()+" "+inscritos.elementAt(i).getApellido()+" Nota Final: "+inscritos.elementAt(i).getNota_Final());
				sw=true;
			}
		}
		if(!sw){
			escribir.escribirMensaje("No hay Estudiantes Aprobados");
			escribir.cerrarsalida();
			return null;
		}
		else{
			escribir.cerrarsalida();
			return inscritos;
		}
		
		
	}
	
	public Vector<Estudiante> listar_Alum_Reprob(){
		Vector<Estudiante> aux = new Vector<Estudiante>();
		boolean sw = false;
		Archivo escribir = new Archivo();
		escribir.crearsalida("listar_reprob.txt");
		escribir.escribirMensaje("Listado de Estudiantes Reprobados");
		System.out.println();
		for (int i = 0; i < inscritos.size() ; i++){
			if(inscritos.elementAt(i).getEstatus()=='R'){
				aux.add(inscritos.elementAt(i));
				escribir.escribirMensaje(inscritos.elementAt(i).getCedula()+" "+inscritos.elementAt(i).getNombre()+" "+inscritos.elementAt(i).getApellido()+" Nota Final: "+inscritos.elementAt(i).getNota_Final());
				sw=true;
			}
		}
		if(!sw){
			escribir.escribirMensaje("No hay Estudiantes Aprobados");
			escribir.cerrarsalida();
			return null;
		}
		else{
			escribir.cerrarsalida();
			return inscritos;
		}
		
		
	}
	
	public float listar_Promedio(){
		float acum=0;
		for (int i = 0; i < inscritos.size(); i++)
			acum=+inscritos.elementAt(i).getNota_Final();
		return (acum/inscritos.size());
	}
	


}
